package com.zmn.oms.services.interfaces.work;

import com.zmn.oms.model.entity.work.OrderWork;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 类描述：工单 service
 *
 * @author lujia
 * @date 2018/11/02 15:35
 */
public interface OrderWorkService {

    /**
     * 通过订单Id和工单Id 主库查询
     *
     * @param orderId 订单Id
     * @param workId  工单Id
     * @return 工单
     */
    OrderWork findOrderWorkByKeySrcMaster(Long orderId, Long workId);

    /**
     * 根据工单ID查询
     *
     * @param orderId 订单Id
     * @param workId
     * @return
     */
    OrderWork findOrderWorkByKey(Long orderId, Long workId);


    /**
     * 动态查询orderWork
     * @param querySql
     * @param orderId
     * @param workId
     * @return
     */
    OrderWork findDynamicOrderWorkByKey(String querySql, Long orderId, Long workId);

    /**
     * 根据工单Id和工程师Id查询工单
     *
     * @param orderId  订单Id
     * @param workId   工单Id
     * @param masterId 工程师Id
     * @return
     */
	OrderWork findMasterWorkDetailSrcMaster(Long orderId, Long workId, Integer masterId);

	/**
     * 根据工单Id和工程师Id查询工单
     *
     * @param orderId  订单Id
     * @param workId   工单Id
     * @param masterId 工程师Id
     * @return
     */
    OrderWork findMasterWorkDetail(Long orderId, Long workId, Integer masterId);

    /**
     * 根据工单id集合查询es工单所需集合
     *
     * @param workIdList 工单id集合
     * @return es工单所需集合
     */
    List<OrderWork> listEsOrderWorkByOrderIdList(List<Long> workIdList);

    /**
     * 根据工单id集合查询es工单所需集合
     *
     * @param workIdList 工单id集合
     */
    List<OrderWork> listOrderWorkByOrderIdList(List<Long> workIdList);

    /**
     * 修改渠道
     *
     * @param orderWork 工单
     */
    void updateChannel(OrderWork orderWork);

    /**
     * 保存派单
     *
     * @param orderWork 工单
     */
    void saveDistribute(OrderWork orderWork);

    /**
     * 修改多工程师
     *
     * @param orderWork 工单
     */
    void saveMultiMaster(OrderWork orderWork);

    /**
     * 取消操作
     *
     * @param updateOrderWork
     */
    void updateCancel(OrderWork updateOrderWork);

    /**
     * 更新异常状态
     *
     * @param orderWork
     */
    void updateAbnormalStatus(OrderWork orderWork);

    /**
     * 更新投诉状态
     *
     * @param orderWork
     */
    void updateComplaintStatus(OrderWork orderWork);

    /**
     * 更新渠道结算状态
     *
     * @param orderWork
     */
    void updateOrderChannelSettleStatus(OrderWork orderWork);

    /**
     * 更新当前备注
     *
     * @param orderWork
     */
    void updateWorkRemark(OrderWork orderWork);

    /**
     * 修改订单状态，已确认->已录入
     *
     * @param orderWork
     */
    void updateConfirmToInputStatus(OrderWork orderWork);

    /**
     * 确认
     * @param orderWork
     */
    void updateConfirm(OrderWork orderWork);

    /**
     * 修改订单状态，已分单、已派单、已领单或已上门状态 -> 已确认
     *
     * @param orderWork
     * @param fields
     */
    void updateAssignBack(OrderWork orderWork, Map<String, Boolean> fields);

    /**
     * 修改订单状态，已派单，已领单或已上门状态 -> 已分单
     *
     * @param orderWork
     * @param fields
     */
    void updateToAssignStatus(OrderWork orderWork, Map<String, Boolean> fields);

    /**
     * 配件报销
     *
     * @param orderWork
     */
    void updatePartReimburse(OrderWork orderWork);

    /**
     * 修改预约时间
     *
     * @param orderWork
     */
    void updateOrderWorkDutyTimeByKey(OrderWork orderWork);

    /**
     * 清空返修信息
     *
     * @param orderWork
     */
    void updateCleanReworkByKey(OrderWork orderWork);

    /**
     * 修改工单
     *
     * @param orderWork 工单
     * @return
     */
    void updateOrderWorkByKey(OrderWork orderWork);

    /**
     * 修改工单，并且同步es
     *
     * @param orderWork 工单
     * @return
     */
    void updateOrderWorkByKeyForSync(OrderWork orderWork);

    /**
     * 修改工单地址
     *
     * @param orderWork 工单
     * @return
     */
    void updateOrderWorkAddressByKey(OrderWork orderWork);

    /**
     * 老系统数据同步
     *
     * @param orderWork
     */

    void updateOldSysSync(OrderWork orderWork);

    /**
     * 订单分单
     *
     * @param orderWork
     */
    void updateOrderWorkAssign(OrderWork orderWork);

    /**
     * 订单接单
     *
     * @param orderWork
     */
    void updateOrderWorkAssignConfirm(OrderWork orderWork);

    /**
     * 保存工单
     *
     * @param orderWork 工单
     * @return
     */
    int insertOrderWork(OrderWork orderWork);

    /**
     * 修改服务平台
     * @param orderWork
     */
    void updatePlatWorkById(OrderWork orderWork);

    /**
     * 修改上门用户id(前置用户id)
     * @param orderWork
     */
    void updateVisitUserId(OrderWork orderWork);

    /**
     * 修改支付用户id
     * @param orderWork
     */
    void updateCustomerUserId(OrderWork orderWork);

    /**
     * 修改产品ID
     * @param orderWork
     */
    void updateProductIdByKey(OrderWork orderWork);

    /**
     * 修改一口价标识
     * @param orderWork
     */
    void updateFinalPriceByKey(OrderWork orderWork);

    /**
     * 挂起修改操作
     * @param orderWork
     */
    void updateOrderWorkSuspendByKey(OrderWork orderWork);

    /**
     * 修改工程师主管
     *
     * @param orderWork
     */
    void updateOrderMasterSupervisorByKey(OrderWork orderWork);

    /**
     * 修改保留配件申请
     * @param orderWork
     */
    void updatePartRetainByKey(OrderWork orderWork);

    /**
     * 修改子公司
     * @param orderWork
     */
	void updateOrderWorkCompany(OrderWork orderWork);

    void updateOrderServItemTypeByKey(OrderWork updateOrderWork);

    /**
     * 修改订单优惠预付金
     */
    void updateOrderWorkDiscountInfo(OrderWork orderWork);
}
